﻿#region Copyright ©2008-2009, Technische Universitaet Muenchen
// ====================================================================================================
//
// Last Changed by       $Author: then $
// Last Changed Date     $LastChangedDate: 2009-06-09 09:28:29 +0200 (Tue, 09 Jun 2009) $
// Last Changed Revision $Rev: 185 $
//
// ====================================================================================================
#endregion

using System;
using System.Collections.Generic;

namespace Tum.CollabXT
{
    /// <summary>
    /// Interface for an activity.
    /// </summary>
    public interface IActivity : IProcessElement
    {
        /// <summary>
        /// Default time, an activity will consume.
        /// </summary>
        int StandardDuration
        {
            get;
            set;
        }
    }

    /// <summary>
    /// Interface for a product.
    /// </summary>
    public interface IProduct : IProcessElement
    {
        /// <summary>
        /// States, if a product is an initial product.
        /// </summary>
        bool IsInitial
        {
            get;
            set;
        }

        /// <summary>
        /// States, if a product is an external product.
        /// </summary>
        bool IsExternal
        {
            get;
            set;
        }

        /// <summary>
        /// States, if a template for a document should provided for an instance.
        /// </summary>
        bool HasDocumentTemplate
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the path to a template, if one exists.
        /// </summary>
        string DocumentTemplatePath
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the Id of the discipline, which contains the product.
        /// </summary>
        string DisciplineId
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the name of the specified milestone type.
        /// </summary>
        string TypeName
        {
            get;
            set;
        }
    }

    public interface IRole : IProcessElement
    {
        /// <summary>
        /// Gets or sets the profile description for a role.
        /// </summary>
        string Profile
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets staffing rule descriptions for a role.
        /// </summary>
        string Staffing
        {
            get;
            set;
        }
    }

    /// <summary>
    /// Interface for a topic.
    /// </summary>
    public interface ITopic : IProcessElement
    { }

    /// <summary>
    /// Interface for a discipline.
    /// </summary>
    public interface IDiscipline : IProcessElement
    { }

    /// <summary>
    /// Interface for a milestone.
    /// </summary>
    public interface IMilestone : IProcessElement
    {
        /// <summary>
        /// Gets or sets the name of the specified milestone type.
        /// </summary>
        string TypeName
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the scheduled date for a milestone.
        /// </summary>
        DateTime ScheduledDate
        {
            get;
            set;
        }

        /// <summary>
        /// Number of the scheduled element in the project plan.
        /// </summary>
        int ScheduleNumber
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets a list of numbers that point to all predecessors.
        /// </summary>
        System.Collections.Generic.List<IMilestone> Predecessors
        {
            get;
            set;
        }
    }

    /// <summary>
    /// Interface for a task.
    /// </summary>
    public interface ITask : IProcessElement
    {
        /// <summary>
        /// Gets or sets the taskId of the activity, this task belongs to.
        /// </summary>
        string ActivityId
        {
            get;
            set;
        }
    }
}
